;(function($){ 

	//记录是否处于编辑模式下;
	var bEdit = false;
	var bRao = false;

	function del_select_all(obj,opts){

		if(opts.selectAll){

			//摇动设备进入全选状态；
			del_shake_window(obj,opts);

		};

	};

	//给每个按钮加事件;
	function del_btnEvent(obj,opts){

		//那些可以被点击的按钮;
		$('*[_url]',obj).each(function(){

			var _this = this;

			$(this).css('position','relative');

			$(this).bind('touchend',function(ev){
				
				opts.click&&opts.click(_this);

			});

		});

	};

	//摇晃设备全选;
	function del_shake_window(obj,opts){

		var last_update = 0;    
		var x, y, z, last_x, last_y, last_z;  
		
		$(window).bind('devicemotion',function(ev){

			if(bRao){

				return;

			};

			var acceleration =ev.accelerationIncludingGravity;    
			var curTime = new Date().getTime(); 

			if ((curTime - last_update)> 100) {  

				var diffTime = curTime -last_update;

				last_update = curTime;        
				x = acceleration.x;    
				y = acceleration.y;    
				z = acceleration.z;  

				var speed = Math.abs(x +y + z - last_x - last_y - last_z) / diffTime * 10000; 

				if (speed > 1000) {  

					bRao = true;
					bEdit = true;
					
					var aClickBtn = $('*[_url]:not([_url="add"])',obj);

					aClickBtn.each(function(){

						if(!$('.del_btn',$(this)).length){

							$(this).prepend($('<div class="del_btn"></div>'));

							$('.del_btn',$(this)).bind('touchstart',function(ev){

								var oEvent = ev || event;

								oEvent.stopPropagation();
								$(this).parent().remove();
								opts.removeBtn&&opts.removeBtn($(this).parent().get(0));

							});

						};							

					});

					aClickBtn.addClass('edit');

					if(opts.shake){

						shake($('li:not([_url="add"])',obj));

					};
					
					$('*[_url]',obj).unbind('touchend');
					  
				};

				last_x = x;    
				last_y = y;    
				last_z = z;  

			}; 

		});

	};

	//手指按下图标时
	function del_start(obj,opts){

		obj.bind('touchstart',function(ev){

			var oEvent = ev || event;
			var oEventBtn = oEvent.target;
			//alert($(oEventBtn).closet('*[_url]').length);
			//阻止默认事件，防止长按按钮的时候选中文字;
			//oEvent.preventDefault();
			if(obj.timer){

				clearTimeout(obj.timer);
				obj.timer = null;

			};

			if(oEvent.touches.length!=1){
				
				return;

			};
			

			//当点击的是按钮时;
			//规定点击的是li自身的时候触发$(oEventBtn).parent().get(0)==$(obj).get(0)---------改为li及其他的子级除了del_btn之外触发：
			if($(oEventBtn).closest('*[_url]')&&(oEventBtn!=obj.get(0))){
				
				//当点击的是图标的时候阻止冒泡;
				oEvent.stopPropagation();
				oEvent.preventDefault();

				//下面这句有待改进
				if($(oEventBtn).closest('[_url="add"]').length){

					return;

				};



				//先确定有没有在编辑模式;
				if(!bEdit){

					obj.timer = setTimeout(function(){

						//没在编辑模式下才进去;
						toEdit(obj,oEventBtn,opts);
						/*bRao = true;*/

					},opts.time*1000);

				}else{

					//在编辑模式下;
					if(!$('.del_btn',$(oEventBtn).closest('*[_url]')).length){

						//如果此按钮下没有小叉的时候

						//如果是单选，则先清除所有小叉;
						if(opts.radio){

							$('.del_btn',obj).remove();

						};

						$(oEventBtn).closest('*[_url]').prepend($('<div class="del_btn"></div>'));

						$('.del_btn',$(oEventBtn).closest('*[_url]')).bind('touchstart',function(ev){

							var oEvent = ev || event;
							if(oEvent.touches.length!=1){
								
								return;

							};
							oEvent.stopPropagation();
							$(this).parent().remove();
							opts.removeBtn&&opts.removeBtn($(this).parent().get(0));

						});

					}else{

						//如果此按钮下有小叉的时候
						$('.del_btn',$(oEventBtn).closest('*[_url]')).remove();

					};

				};

			};
			
		});


		//点击除按钮外其他位置时退出编辑模式;
		$(document).bind('touchstart',function(ev){

			if(ev.touches.length!=1){
				
				return;

			};

			//在编辑模式下才进去;
			if(bEdit){

				toEdit(obj,null,opts);
				bRao = false;

			};

		});


	};

	//手指从按钮上抬起时;
	function del_end(obj){

		obj.bind('touchend',function(){

			clearTimeout(obj.timer);
			obj.timer = null;

		});

	};

	function toEdit(obj,delBtn,opts){

		var aClickBtn = $('*[_url]:not([_url="add"])',obj);

		if(delBtn){

			$(delBtn).closest('*[_url]').prepend($('<div class="del_btn"></div>'));

			$('.del_btn',$(delBtn).closest('*[_url]')).bind('touchstart',function(ev){

				var oEvent = ev || event;
				if(oEvent.touches.length!=1){
					
					return;

				};
				oEvent.stopPropagation();
				$(this).parent().remove();
				opts.removeBtn&&opts.removeBtn($(this).parent().get(0));

			});

		};

		if(!bEdit){

			//编辑模式
			aClickBtn.addClass('edit');

			if(opts.shake){

				shake($('li:not([_url="add"])',obj));

			};
			
			$('*[_url]',obj).unbind('touchend');
			bEdit = true;


		}else{

			//非编辑模式
			aClickBtn.removeClass('edit');
			$('.del_btn',obj).remove();

			if(opts.shake){

				closeShake(obj);

			};

			del_btnEvent(obj,opts);
			bEdit = false;

		};

	};

	function closeShake(obj){

		$('li:not([_url="add"])',obj).each(function(){

			if(this.tiker){

				clearInterval(this.tiker);
				this.tiker = null;

			};

			$(this).css('-webkit-transform','rotate('+0+'deg)');

		});

	};

	function shake(obj){

		obj.each(function(){

			var _this = this;
			var iTarget;

			if(!this.tiker){

				this.arr = [];
				this.tiker = setInterval(function(){

					if(_this.arr.length==0){

						for(var i=0; i<35; i++){

							iTarget = rnd(20,-20);

							if(!_this.arr.find(iTarget)){

								_this.arr.push(iTarget);

							};

						};

					};

					$(_this).css('-webkit-transform','rotate('+_this.arr.pop()+'deg)');

				},60);

			};

		});

	};

	//取随机数;
	function rnd(n,m){

		return parseInt((Math.random()*(m-n)+n));

	};

	Array.prototype.find = function (n){
		
		for(var i=0;i<this.length;i++)
		{
			if(this[i]==n)return true;
		}
		
		return false;
		
	};

	function isChild(oParent, obj)
	{
		while(obj)
		{	

			obj=obj.parentNode;

			if(obj==oParent)
			{
				return true;
			}
			
		}
		
		return false;
	}

    $.fn.del_icon= function(options){ 
    	
		 // 将defaults 和 options 参数合并到{}   
	     var opts = $.extend({},$.fn.del_icon.defaults,options); 
		 
		 return this.each(function(){	

			var obj = $(this);  

			//是否全选;
			del_select_all(obj,opts);

			//给每个按钮加点击事件;
			del_btnEvent(obj,opts);

			//当按下按钮时;
			del_start(obj,opts);

			//当手指抬起时
			del_end(obj,opts);

		  			
	})
	/**each end**/
  } 
  //定义默认
  $.fn.del_icon.defaults = {
	
	time:1,
	radio:false,
	shake:true,
	selectAll:true

  };   
  
})(Zepto);